home *** CD-ROM | disk | FTP | other *** search
- /*
- File: CntxtOSL.c
-
- Contains: New functions specific to this Context version of the OSL
-
- Owned by: Nick Pilch
-
- Copyright: © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <11> 8/29/95 jpa DescPtr --> AEDesc* for Univ Hdrs 2.1.
- [1279173]
- <10> 6/27/95 NP 1262792: new version of OSLObjectInit
- <9> 6/23/95 NP 1195474: Make Resolve reentrant.
- <8> 5/3/95 NP 1211084: Remove 5$
- <7> 4/25/95 NP 1186795, 1237220, 1240571: Fixed whose
- clauses by allowing swapping in count proc.
- <6> 2/22/95 eeh 1222904: fix use of SetCurrentContext
- <5> 2/8/95 NP 1218550: Don't allocate OSLContexts
- dynamically.
- <4> 1/22/95 NP Create dummy pascal routines for other
- exportable routines in the OSL.
- <3> 11/15/94 NP 1196322-made functions non-pascal. Added
- glue code.
- <2> 8/19/94 NP 1181622: Ownership fix.
- <9> 2/7/94 NP Tiger Team doings.
- <8> 12/20/93 NP Changed CountProc to be able to switch
- contexts.
- <7> 10/22/93 NP Added OSLCallObjectAccessor.
- <6> 10/18/93 NP Support for the rest of the callback
- functions.
- <5> 10/11/93 NP Implemented new count and compare callback
- dispatch routines.
- <4> 9/24/93 JA Minor syntactic tweaks for THINK C++.
- <3> 8/18/93 NP Mods for new context scheme.
- <2> 8/16/93 NP Implementing.
- <1> 8/16/93 NP first checked in
-
- To Do:
- */
-
- #ifndef _CNTXTOSL_
- #include "CntxtOSL.h"
- #endif
-
- #ifndef __AEOBJECTS__
- #include <AEObjects.h>
- #endif
-
- #ifndef _OSLPRIV_
- #include "OSLPriv.h"
- #endif
-
- #ifndef _OSLTOKEN_
- #include "OSLToken.h"
- #endif
-
- #pragma segment CntxtOSL
-
- OSErr CREATEOBJSPECIFIER(DescType desiredClass, AEDesc *theContainer, DescType keyForm, AEDesc *keyData, Boolean disposeInputs, AEDesc *objSpecifier);
- OSErr CREATERANGEDESCRIPTOR(AEDesc *rangeStart, AEDesc *rangeStop, Boolean disposeInputs, AEDesc *theDescriptor);
- OSErr CREATELOGICALDESCRIPTOR(AEDescList *theLogicalTerms, DescType theLogicOperator, Boolean disposeInputs, AEDesc *theDescriptor);
- OSErr CREATEOFFSETDESCRIPTOR(long theOffset, AEDesc *theDescriptor);
- OSErr CREATECOMPDESCRIPTOR(DescType comparisonOperator, AEDesc *operand1, AEDesc *operand2, Boolean disposeInputs, AEDesc *theDescriptor);
-
- #pragma lib_export on
-
- //------------------------------------------------------------------------------
- // OSLObjectInit
- //------------------------------------------------------------------------------
-
- OSErr OSLObjectInit( OSLContext* context )
- {
- return iAEObjectInit(context);
- }
-
- //------------------------------------------------------------------------------
- // OSLResolve
- //------------------------------------------------------------------------------
-
- OSErr OSLResolve(const AEDesc* objectSpecifier, OSLToken* theToken,
- OSLContext* startingContext)
- {
- return iAEResolve(*objectSpecifier, theToken, startingContext);
- }
-
- //------------------------------------------------------------------------------
- // OSLDisposeToken
- //------------------------------------------------------------------------------
-
- OSErr OSLDisposeToken(OSLToken* theToken)
- {
- return iAEDisposeToken(theToken);
- }
-
- //------------------------------------------------------------------------------
- // OSLCallObjectAccessor
- //------------------------------------------------------------------------------
-
- OSErr OSLCallObjectAccessor(DescType desiredClass,
- const AEDesc *containerToken,
- DescType containerClass,
- DescType keyForm,
- const AEDesc *keyData,
- AEDesc *token )
- {
- return iCallAccessor(desiredClass, *containerToken, containerClass,
- keyForm, *keyData, token);
- }
-
- #pragma lib_export off
-
- //------------------------------------------------------------------------------
- // GetAppDoesFlags
- //------------------------------------------------------------------------------
-
- OSErr GetAppDoesFlags(OSLContext* context, short* appDoesFlags)
- {
- CallbackCallerProc dispatchProc;
-
- dispatchProc = (*context->getCallerProc)(kCallbackFlagsGetter);
- *appDoesFlags = (*(CallbackFlagsGetter)dispatchProc)(context->refCon);
- return noErr;
- }
-
- //------------------------------------------------------------------------------
- // NewCallCountProc
- //------------------------------------------------------------------------------
-
- OSErr NewCallCountProc(DescType desiredType,
- DescType containerClass,
- OSLToken container,
- long* result)
- {
- CallbackCallerProc dispatchProc;
- OSLContext context;
- OSErr error;
- // OSLContext afterContext;
-
- error = GetCurrentContext(&context);
- if (error)
- return error;
- dispatchProc = (*context.getCallerProc)(kCountProc);
- error = (*(CountProcCaller)dispatchProc)(desiredType, containerClass,
- &container, result,
- context.refCon);
- if (error == errAEEventNotHandled || error == errAENotASpecialFunction)
- {
- GlobalRecHandle aGlobalRef = GetSysGlobal();
- if (aGlobalRef)
- {
- OSLCountUPP aProcPtr = (*aGlobalRef)->countProcPtr ;
- if (aProcPtr)
- error = CallOSLCountProc(aProcPtr, desiredType, containerClass,
- container, result);
- }
- }
- return error;
- #if 0
- // CONTEXT CHANGED?
- if (container.descriptorType == kSwitchDescType && (error == noErr))
- {
- // DISPOSE OLD CONTAINER TOKEN????
- error = OSLGetTokenContext(&container, &afterContext);
- if (error)
- return error;
- error = SetCurrentContext(&afterContext);
- if (error)
- return error;
- // DISPOSE TOKEN???? PROBABLY.
- MakeNullToken(&container);
- containerClass = typeNull;
- error = (*(CountProcCaller)dispatchProc)(desiredType, containerClass,
- &container, result,
- context.refCon);
- }
- #endif /* 0 */
- }
-
- //------------------------------------------------------------------------------
- // NewCallCompareProc
- //------------------------------------------------------------------------------
-
- OSErr NewCallCompareProc(DescType oper,
- OSLToken obj1,
- OSLToken obj2,
- Boolean* result)
- {
- CallbackCallerProc dispatchProc;
- OSLContext context;
- OSErr error;
-
- error = GetCurrentContext(&context);
- if (error)
- return error;
- dispatchProc = (*context.getCallerProc)(kCompareProc);
- error = (*(CompareProcCaller)dispatchProc)(oper, &obj1, &obj2, result,
- context.refCon);
- if (error == errAEEventNotHandled || error == errAENotASpecialFunction)
- {
- GlobalRecHandle aGlobalRef = GetSysGlobal();
- if (aGlobalRef)
- {
- OSLCompareUPP aProcPtr = (*aGlobalRef)->compareProcPtr ;
- if (aProcPtr)
- error = CallOSLCompareProc(aProcPtr, oper, obj1, obj2, result);
- }
- }
- return error;
- }
-
- //------------------------------------------------------------------------------
- // NewCallAdjustMarks
- //------------------------------------------------------------------------------
-
- OSErr NewCallAdjustMarks(long newStart, long newStop, OSLToken markToken)
- {
- CallbackCallerProc dispatchProc;
- OSLContext context;
- OSErr error;
-
- error = GetCurrentContext(&context);
- if (error)
- return error;
- dispatchProc = (*context.getCallerProc)(kAdjustMarksProc);
- error = (*(AdjustMarksProcCaller)dispatchProc)(newStart, newStop,
- &markToken, context.refCon);
- if (error == errAEEventNotHandled || error == errAENotASpecialFunction)
- {
- GlobalRecHandle aGlobalRef = GetSysGlobal();
- if (aGlobalRef)
- {
- OSLAdjustMarksUPP aProcPtr = (*aGlobalRef)->AdjustMarksProcPtr ;
- if (aProcPtr)
- error = CallOSLAdjustMarksProc(aProcPtr, newStart, newStop,
- markToken);
- }
- }
- return error;
- }
-
- //------------------------------------------------------------------------------
- // NewCallMark
- //------------------------------------------------------------------------------
-
- OSErr NewCallMark(OSLToken dToken, OSLToken markToken, long n)
- {
- CallbackCallerProc dispatchProc;
- OSLContext context;
- OSErr error;
-
- error = GetCurrentContext(&context);
- if (error)
- return error;
- dispatchProc = (*context.getCallerProc)(kMarkProc);
- error = (*(MarkProcCaller)dispatchProc)(&dToken, &markToken, n,
- context.refCon);
- if (error == errAEEventNotHandled || error == errAENotASpecialFunction)
- {
- GlobalRecHandle aGlobalRef = GetSysGlobal();
- if (aGlobalRef)
- {
- OSLMarkUPP aProcPtr = (*aGlobalRef)->MarkProcPtr;
- if (aProcPtr)
- error = CallOSLMarkProc(aProcPtr, dToken, markToken, n);
- }
- }
- return error;
- }
-
- //------------------------------------------------------------------------------
- // NewCallGetMarkToken
- //------------------------------------------------------------------------------
-
- OSErr NewCallGetMarkToken(OSLToken dContainerToken, DescType containerClass,
- OSLToken *result)
- {
- CallbackCallerProc dispatchProc;
- OSLContext context;
- OSErr error;
-
- error = GetCurrentContext(&context);
- if (error)
- return error;
- dispatchProc = (*context.getCallerProc)(kGetMarkTokenProc);
- error = (*(GetMarkTokenProcCaller)dispatchProc)(&dContainerToken,
- containerClass,
- result,
- context.refCon);
- if (error == errAEEventNotHandled || error == errAENotASpecialFunction)
- {
- GlobalRecHandle aGlobalRef = GetSysGlobal();
- if (aGlobalRef)
- {
- OSLGetMarkTokenUPP aProcPtr = (*aGlobalRef)->getMarkIDProcPtr;
- if (aProcPtr)
- error = CallOSLGetMarkTokenProc(aProcPtr, dContainerToken,
- containerClass, result);
- }
- }
- return error;
- }
-
- //------------------------------------------------------------------------------
- // NewCallGetErrDesc
- //------------------------------------------------------------------------------
-
- OSErr NewCallGetErrDesc(AEDesc* *appDescPtr)
- {
- CallbackCallerProc dispatchProc;
- OSLContext context;
- OSErr error;
-
- error = GetCurrentContext(&context);
- if (error)
- return error;
- dispatchProc = (*context.getCallerProc)(kGetErrDescProc);
- error = (*(GetErrDescProcCaller)dispatchProc)(appDescPtr, context.refCon);
- if (error == errAEEventNotHandled || error == errAENotASpecialFunction)
- {
- GlobalRecHandle aGlobalRef = GetSysGlobal();
- if (aGlobalRef)
- {
- OSLGetErrDescUPP aProcPtr = (*aGlobalRef)->TypeAsIndexProc;
- if (aProcPtr)
- error = CallOSLGetErrDescProc(aProcPtr, appDescPtr);
- }
- }
- return error;
- }
-
- //------------------------------------------------------------------------------
- // NewCallDisposeToken
- //
- // Code in the orginal OSL already handles calling through to the system
- // handler, if any.
- //------------------------------------------------------------------------------
-
- OSErr NewCallDisposeToken(OSLToken* theToken)
- {
- CallbackCallerProc dispatchProc;
- OSLContext context;
- OSErr error;
-
- error = GetCurrentContext(&context);
- if (error)
- return error;
- dispatchProc = (*context.getCallerProc)(kDisposeTokenProc);
- return (*(DisposeTokenProcCaller)dispatchProc)(theToken, context.refCon);
- }
-
- //==============================================================================
- // Grunge for linker
- //
- // We use the same export files for PowerPC and 68K. However, these routine
- // really need to be upper case in the 68K case (because they are pascal), but
- // mixed case in the PowerPC case. Therefore, we have both versions of the
- // routines in both builds. In the PowerPC case, the upper case names are
- // not exported. In the 68K case, the upper case are exported, but you get
- // link warnings because there are two definitions of them. It's OK, both
- // versions are semantically identical.
- //==============================================================================
-
- #pragma lib_export on
-
- OSErr CREATEOBJSPECIFIER(DescType desiredClass, AEDesc *theContainer, DescType keyForm, AEDesc *keyData, Boolean disposeInputs, AEDesc *objSpecifier)
- {
- return CreateObjSpecifier(desiredClass, theContainer, keyForm, keyData, disposeInputs, objSpecifier);
- }
-
- OSErr CREATERANGEDESCRIPTOR(AEDesc *rangeStart, AEDesc *rangeStop, Boolean disposeInputs, AEDesc *theDescriptor)
- {
- return CreateRangeDescriptor(rangeStart, rangeStop, disposeInputs, theDescriptor);
- }
-
- OSErr CREATELOGICALDESCRIPTOR(AEDescList *theLogicalTerms, DescType theLogicOperator, Boolean disposeInputs, AEDesc *theDescriptor)
- {
- return CreateLogicalDescriptor(theLogicalTerms, theLogicOperator, disposeInputs, theDescriptor);
- }
-
- OSErr CREATEOFFSETDESCRIPTOR(long theOffset, AEDesc *theDescriptor)
- {
- return CreateOffsetDescriptor(theOffset, theDescriptor);
- }
-
- OSErr CREATECOMPDESCRIPTOR(DescType comparisonOperator, AEDesc *operand1, AEDesc *operand2, Boolean disposeInputs, AEDesc *theDescriptor)
- {
- return CreateCompDescriptor(comparisonOperator, operand1, operand2, disposeInputs, theDescriptor);
- }
-
-